home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / et / et3_0-a1.lha / et3 / src / PROGENV / InspClickDialog.C < prev    next >
C/C++ Source or Header  |  1992-06-10  |  3KB  |  151 lines

  1. #ifdef __GNUG__
  2. #pragma implementation
  3. #endif
  4.  
  5. #include "Buttons.h"
  6. #include "BorderItems.h"
  7. #include "Scroller.h"
  8. #include "CollView.h"
  9. #include "Window.h"
  10. #include "Expander.h"
  11. #include "OrdColl.h"
  12. #include "Class.h"
  13. #include "String.h"
  14.  
  15. #include "InspClickDialog.h"
  16.  
  17. #include "ClassItem.h"
  18.  
  19. //---- PeInspectClickDialog ---------------------------------------------------------
  20.  
  21. NewMetaImpl(PeInspectClickDialog, Dialog, (TP(objList)));
  22.  
  23. PeInspectClickDialog::PeInspectClickDialog() : Dialog("Inspect Click")
  24. {
  25.     objList= new CollectionView(this, 0, eCVDontStuckToBorder);
  26.     title= new TextItem("");
  27.     objList->SetId(cIdIClickList);
  28.     objList->SetMinExtent(Point(150,0));
  29. }
  30.  
  31. PeInspectClickDialog::~PeInspectClickDialog()
  32. {
  33.     SafeDelete(objList);
  34. }
  35.  
  36. int PeInspectClickDialog::ShowInWindow(VObject *vop)
  37. {
  38.     objList->ClearSelection();
  39.     LoadContainers(vop);    
  40.     return ShowOnWindow(vop->GetWindow());
  41. }
  42.  
  43. void PeInspectClickDialog::LoadContainers(VObject *vop)
  44. {
  45.     GrFont fid= gFixedFont->Fid();
  46.     int size= gFixedFont->Size();
  47.     static Font *boldFont, *font;
  48.     if (boldFont == 0)
  49.     boldFont= new_Font(fid, size, eFaceBold);
  50.  
  51.     title->SetString(form("Clicked on %s (0x%x)", 
  52.                     vop->ClassName(), (int)vop), TRUE);
  53.     OrdCollection *oc= new OrdCollection;
  54.     
  55.     for (int i= 0; vop != 0; vop= vop->GetContainer(), i++) {
  56.     if (i == 0)
  57.         font= boldFont;
  58.     else
  59.         font= gFixedFont; 
  60.         
  61.     oc->Add(MakeItem(vop, font));
  62.     }
  63.     objList->SetCollection(oc);
  64. }
  65.  
  66. VObject *PeInspectClickDialog::MakeItem(VObject *vop, Font *fp)
  67. {
  68.     char buf[400];
  69.     buf[0]= '\0';
  70.     vop->InspectorId(buf, sizeof(buf));
  71.     if (!strlen(buf))
  72.     return new PeObjectItem(cIdNone, 
  73.               form("%s (0x%x)", vop->ClassName(), (int)vop), vop, fp);
  74.     return new PeObjectItem(cIdNone, form("%s (%s)", vop->ClassName(), buf), vop, fp);
  75. }
  76.     
  77. VObject *PeInspectClickDialog::DoMakeContent()
  78. {
  79.     VObject *actions=
  80.     new VExpander(5, 
  81.         new ActionButton(cIdOk, "Inspect", TRUE),
  82.         new ActionButton(cIdIClickEdit, "Edit Source"),
  83.         new ActionButton(cIdIClickTree, "Show Hierarchy"),
  84.         new ActionButton(cIdIClickDocu, "Show Documentation"),
  85.         new ActionButton (cIdCancel, "Cancel"),
  86.         0
  87.     );
  88.  
  89.     VObject *scroller= new Scroller(objList, Point(200, 150), cIdIClickList);
  90.  
  91.     return
  92.     new Matte(
  93.         new VExpander(2,
  94.         title,
  95.         new HExpander(10,
  96.             scroller,
  97.             actions,
  98.             0
  99.         ),
  100.         0
  101.         )
  102.     );
  103. }
  104.  
  105. void PeInspectClickDialog::DoSetup()
  106. {
  107.     bool empty= objList->GetSelection().IsEmpty();
  108.     EnableItem(cIdOk, !empty);
  109.     EnableItem(cIdIClickEdit, !empty);
  110.     EnableItem(cIdIClickTree, !empty);
  111.     EnableItem(cIdIClickDocu, FALSE);
  112. }
  113.  
  114. Object *PeInspectClickDialog::GetObject() 
  115. {
  116.     Rectangle r= objList->GetSelection();
  117.     if (r.IsEmpty())
  118.     return 0;
  119.     PeObjectItem *oi= Guard(objList->GetCollection()->At(r.origin.y), PeObjectItem);
  120.     return oi->GetObject();
  121. }
  122.  
  123. void PeInspectClickDialog::Control(int id, int p, void *v)
  124. {
  125.     switch (id) {
  126.     
  127.     case cIdIClickList:
  128.     if (p == cPartCollDoubleSelect) {
  129.         Dialog::Control(cIdOk, cPartAction, v);
  130.         return;
  131.     }
  132.     DoSetup();
  133.     return;
  134.     
  135.     case cIdOk:
  136.     case cIdIClickEdit:
  137.     case cIdIClickTree:
  138.     case cIdIClickDocu:
  139.     break;
  140.     
  141.     case cIdCancel:
  142.     objList->ClearSelection();
  143.     break;
  144.     
  145.     default:
  146.     break;
  147.     }
  148.     Dialog::Control(id, p, v);
  149. }
  150.  
  151.